package com.party.core.service.activity;

import com.party.common.paging.Page;
import com.party.core.exception.BusinessException;
import com.party.core.model.activity.Activity;
import com.party.core.model.activity.ActivityWithMemberPartner;
import com.party.core.model.activity.BookOrderParameter;
import com.party.core.model.activity.DistributionActivity;
import com.party.core.service.IBaseService;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * IActivityService 活动接口
 *
 * @author Wesley
 * @data 16/9/5 17:26 .
 */
public interface IActivityService extends IBaseService<Activity> {

	/**
	 * 查询所有活动
	 * 
	 * @return 活动列表
	 */
	List<Activity> listAll();

	List<ActivityWithMemberPartner> webListPage(ActivityWithMemberPartner activity, Map<String, Object> params, Page page);

	/**
	 * 根据事件编号统计
	 * @param eventId 事件编号
	 * @return 统计结果
	 */
	Activity countForEventId(String eventId);

	Integer getCount(Activity activity);

	/**
	 * 合伙人的众筹项目
	 *
	 * @param params
	 * @param page
	 * @return
	 */
	List<Map<String, Object>> copartnerListPage(Map<String, Object> params, Page page);

	/**
	 * 统计销售量
	 * @param id 编号
	 * @param payment 金额
	 */
	void countSales(String id, Float payment);

	/**
	 * 统计众筹项目浏览量
	 * @param id 众筹编号
	 * @return 浏览量
	 */
	Integer crowdfundView(String id);

	Integer getCountByEventId(String eventId);

	/**
	 * 获取没有主题的众筹id
	 * @return
	 */
    List<String> getOrgNotEventId();

    String getShowAddress(Activity activity);

    List<Map<String,Object>> getActivityCopartner(String eventId);

	/**
	 * 发布者的其他项目
	 * @param memberId 会员编号
	 * @param id 项目编号
	 * @return 项目列表
	 */
	List<Activity> otherActivity(String memberId, String id, String authorId);


	/**
	 * 订单下单
	 * @param parameter 请求参数
	 */
	String bookOrder(BookOrderParameter parameter) throws BusinessException;

	/**
	 * 合作渠道的众筹活动列表
	 *
	 * @param params 参数
	 * @param page   分页参数
	 * @return
	 */
	List<Map<String, Object>> cosponsorList(Map<String, Object> params, Page page);


	/**
	 * 通过发布者id获取项目（在当前项目的参与者有支持者的情况下）
	 *
	 * @param activityId  项目id
	 * @return
	 */
	List<Activity>findByIdActivitys(String activityId );


	String getShowAddressMap(Activity activity, Map<String, String> map);

	/**
	 * 可分销的众筹项目
	 *
	 * @param params 请求参数
	 * @param page   分页参数
	 * @return 项目列表
	 */
	List<Map<String, Object>> copartnerListPage2(Map<String, Object> params, Page page);

	/**
	 * 已分销的项目
	 *
	 * @param activity 查询参数
	 * @param params
	 * @param page     分页参数
	 * @return 项目列表
	 */
	List<DistributionActivity> listForDistribution(Activity activity, Map<String, Object> params, Page page);

	/**
	 * 课程列表
	 *
	 * @param activity
	 * @param params
	 * @param page
	 * @return
	 */
	List<ActivityWithMemberPartner> courseWebListPage(ActivityWithMemberPartner activity, Map<String, Object> params, Page page);

	/**
	 * 获取活动类型
	 *
	 * @param activity 活动
	 * @return 活动类型
	 */
	Integer getActivityType(Activity activity);


	/**
	 * 锁行查询活动实体
	 *
	 * @param id
	 * @return 活动实体
	 */
	Activity rowLockQueryActivity(String id);

	/**
	* @Author hzq
	* @Description //根据众筹id找项目
	* @Date 18:13 2019/4/10
	* @param projectId
	* @return
	**/
	Activity findByProjectId(String projectId);

    /**
     * @param targetId 项目id
     * @return
     * @Author yifeng
     * @Description 获取众筹项目的众筹中，众筹成功人数
     * @Date 14:22 2019/4/12
     **/
    Activity getZcNumByTargetId(String targetId, boolean queryZcNum);

    Integer findByCosponsorId(String cosponsorId);

    List<String> getXzgsActivityList(String title, String xzgsMemberId);

	void updateMember(String activityId, String memberId);

	Integer getActNumByMemberGroupId(List<String> memberGroupIds,Map<String, Object> params);

	List<Activity> getActivitysByEventId(String eventId);
}
